﻿namespace MicroCloud.Pack.Identity.Dtos
{
    /// <summary>
    /// 角色输出DTO
    /// </summary>
    [MapFrom(typeof(Role))]
    public class RoleOutputDto : IOutputDto, IDataAuthEnabled
    {
        /// <summary>
        /// 初始化一个角色信息输出DTO <see cref="RoleOutputDto"/> 的新实例
        /// </summary>
        public RoleOutputDto()
        { }

        /// <summary>
        /// 初始化一个角色信息输出DTO <see cref="RoleOutputDto"/> 的新实例
        /// </summary>
        /// <param name="role">角色实体数据</param>
        public RoleOutputDto(Role role)
        {
            Id = role.Id;
            Name = role.Name;
            Description = role.Description;
            Remark = role.Remark;

            IsAdmin = role.IsAdmin;
            IsDefault = role.IsDefault;
            IsSystem = role.IsSystem;

            IsLocked = role.IsLocked;

            CreatorId = role.CreatorId;
            CreatedTime = role.CreatedTime;

            UpdaterId = role.UpdaterId;
            UpdatedTime = role.UpdatedTime;
        }

        #region 属性
        /// <summary>
        /// 获取或设置 角色编号
        /// </summary>
        [Description("编号")]
        public long Id { get; set; }
  
        /// <summary>
        /// 获取或设置 角色名称
        /// </summary>
        [Description("角色名称")]
        public string Name { get; set; }

        /// <summary>
        /// 获取或设置 角色描述
        /// </summary>
        [Description("角色描述")]
        public string Description { get; set; }

        /// <summary>
        /// 获取或设置 备注
        /// </summary>
        public string Remark { get; set; }
    
        /// <summary>
        /// 获取或设置 是否管理员角色
        /// </summary>
        [Description("是否管理员角色")]
        public bool IsAdmin { get; set; }

        /// <summary>
        /// 获取或设置 是否默认
        /// </summary>
        [Description("是否默认")]
        public bool IsDefault { get; set; }
  
        /// <summary>
        /// 获取或设置 是否系统角色
        /// </summary>
        [Description("是否系统角色")]
        public bool IsSystem { get; set; }
     
        /// <summary>
        /// 获取或设置 是否锁定
        /// </summary>
        [Description("是否锁定")]
        public bool IsLocked { get; set; }
     
        /// <summary>
        /// 获取或设置 创建者编号
        /// </summary>
        [DisplayName("创建者编号")]
        public long? CreatorId { get; set; }

        /// <summary>
        /// 获取或设置 创建者名称
        /// </summary>
        [DisplayName("创建者名称")]
        public string CreatorName { get; set; }

        /// <summary>
        /// 获取或设置 创建者昵称
        /// </summary>
        [DisplayName("创建者昵称")]
        public string CreatorNickname { get; set; }

        /// <summary>
        /// 获取或设置 创建时间
        /// </summary>
        [DisplayName("创建时间")]
        public DateTime CreatedTime { get; set; }
     
        /// <summary>
        /// 获取或设置 更新者编号
        /// </summary>
        [DisplayName("更新者编号")]
        public long? UpdaterId { get; set; }
   
        /// <summary>
        /// 获取或设置 更新者名称
        /// </summary>
        [DisplayName("更新者名称")]
        public string UpdaterName { get; set; }
     
        /// <summary>
        /// 获取或设置 更新者昵称
        /// </summary>
        [DisplayName("更新者昵称")]
        public string UpdaterNickname { get; set; }

        /// <summary>
        /// 获取或设置 更新时间
        /// </summary>
        [DisplayName("更新时间")]
        public DateTime? UpdatedTime { get; set; }

        //Implementation of IDataAuthEnabled
        /// <summary>
        /// 获取或设置 是否可更新的数据权限状态
        /// </summary>
        public bool Updatable { get; set; }

        /// <summary>
        /// 获取或设置 是否可删除的数据权限状态
        /// </summary>
        public bool Deletable { get; set; }

        #endregion
    }
}